import java.util.PriorityQueue;
import java.util.Queue;

/**
 * Created with IntelliJ IEDA.
 * Description:
 * User:86186
 * Date:2022-10-01
 * Time:22:14
 */

/***
 * 力扣1684:重写格式化电话号码
 */

public class reformatNumber {
    public String reformatNumber(String number) {
        /**
         * 首先，删除 所有的空格和破折号
         * 其次，将数组从左到右 每 3 个一组 分块，直到 剩下 4 个或更少数字。剩下的数字将按下述规定再分块：
         *         2 个数字：单个含 2 个数字的块。
         *         3 个数字：单个含 3 个数字的块。
         *         4 个数字：两个分别含 2 个数字的块。
         *
         * 最后用破折号将这些块连接起来。注意，重新格式化过程中 不应该 生成仅含 1 个数字的块，并且 最多 生成两个含 2 个数字的块。
         *
         * 返回格式化后的电话号码。
         */
        StringBuilder digits = new StringBuilder();
        for (int i = 0; i < number.length(); ++i) {
            char ch = number.charAt(i);
            //Character.isDigit（ch）判断ch单字符是否是数字
            if (Character.isDigit(ch)) {
                digits.append(ch);
            }
        }

        int n = digits.length();
        int pt = 0;
        StringBuilder ans = new StringBuilder();
        while (n > 0) {
            if (n > 4) {
                ans.append(digits.substring(pt, pt + 3) + "-");
                pt += 3;
                n -= 3;
            } else {
                /**
                 2 个数字：单个含 2 个数字的块。
                 3 个数字：单个含 3 个数字的块。
                 4 个数字：两个分别含 2 个数字的块。
                 */
                if (n == 4) {
                    ans.append(digits.substring(pt, pt + 2) + "-" + digits.substring(pt + 2, pt + 4));
                } else {
                    ans.append(digits.substring(pt, pt + n));
                }
                break;
            }
        }
        return ans.toString();
    }
}
